package aplicacion.modelo;

import java.util.Iterator;


public class FantasmaHuidizo implements EstadoDeFantasma {
	private Fantasma fantasma;
	private final static int CONTADOR_LOOPS = 10;
	
	public FantasmaHuidizo(Fantasma unFantasma) {
		fantasma = unFantasma;
	}
	
	public void actuar() {
		Celda celdaMasLejana = getCeldaMasLejanaAPacman();
		fantasma.moverA(celdaMasLejana.getPosicion());
	}

	private Celda getCeldaMasLejanaAPacman() {
		CeldasVecinas arrCeldasVecinas = fantasma.getCeldasVecinas();
		Iterator<Celda> iterador = arrCeldasVecinas.iterator();
		
		Celda celdaMasLejana = null, celdaSiguiente = null;
		double distanciaMaxima = -1;
	
		while(iterador.hasNext()) {
			celdaSiguiente = iterador.next();
			// Si la celda a evaluar no esta bloqueada y no es la celda anterior
			if (!celdaSiguiente.estaBloqueada() && celdaSiguiente.getPosicion() != fantasma.getPosicionAnterior()) {
				double distanciaCeldaSiguiente =  celdaSiguiente.getPosicion().distance(fantasma.getPacman().getPosicion());
				
				if (distanciaCeldaSiguiente > distanciaMaxima) {
					distanciaMaxima = distanciaCeldaSiguiente;
					celdaMasLejana = celdaSiguiente;
				}
			}
		}
		
		return celdaMasLejana;
	}

	@Override
	public void reaccionarAntePacman() {
		fantasma.morir();
	}

	@Override
	public int getContadorGameloops() {
		return CONTADOR_LOOPS;
	}
}